package com.qqtech.qquan.user.service;

import com.qqtech.core.common.exception.BizzException;
import com.qqtech.core.frame.model.Result;
import com.qqtech.core.frame.service.BaseService;
import com.qqtech.qquan.user.enums.UserIdentityTypeDictEnum;
import com.qqtech.qquan.user.model.UserLogin;
import com.qqtech.qquan.user.model.UserLoginVo;

public interface UserLoginService extends BaseService<UserLogin> {
	/**
	 * 注册后，提示用户修改密码和昵称
	 * 
	 * @param userId
	 * @param password
	 * @param nick
	 * @return
	 * @throws BizzException
	 */
	Result initUser(Integer userId, String password, String nick) throws BizzException;

	/**
	 * 修改用户信息后，调用此方法更新用户token缓存信息
	 * 
	 * @param token
	 */
	public void clear(String token);

	/**
	 * 更新所有用户token缓存信息
	 * 
	 * @param token
	 */
	public void clearAll();

	/**
	 * 修改用户登陆密码
	 * 
	 * @param userId
	 *            用户ID
	 * @param password
	 *            用户新密码
	 * @throws BizzException
	 */
	public void doChangePwd(Integer userId, String password) throws BizzException;

	/**
	 * 
	 * @param userId
	 *            用户ID
	 * @param password
	 *            用户新密码
	 * @param verifycode
	 *            验证码
	 * @return
	 */
	public Result doChangePwdWithVerifycode(Integer userId, String password, String verifycode);

	/**
	 * 缓存-根据令牌获取登录信息(用户头像、昵称、姓名、手机号码)
	 * 
	 * @param token
	 * @return
	 */
	public UserLoginVo getCacheByToken(String token);

	/**
	 * 根据令牌获取登录信息(用户头像、昵称、姓名、手机号码)
	 * 
	 * @param token
	 * @return
	 */
	UserLoginVo getByToken(String token);

	/**
	 * 用户注册
	 * 
	 * @param identity
	 *            注册的手机号或email
	 * @param verifycode
	 *            短信或email的验证码
	 * @param identityType
	 *            注册枚举类型
	 * @param deviceId
	 *            客户端设备id
	 * @return
	 */
	Result doRegister(String identity, String verifycode, UserIdentityTypeDictEnum identityType, String deviceId);

	/**
	 * 用户登陆-根据手机号和验证码登陆
	 * 
	 * @param phone
	 *            注册的手机号
	 * @param verifycode
	 *            短信或email的验证码
	 * @param deviceId
	 *            客户端设备id
	 * @return
	 */
	Result doLoginWithPhoneCode(String phone, String verifycode, String deviceId);

	/**
	 * 用户登录-根据手机号和密码登录
	 * 
	 * @param phone
	 *            注册的手机号
	 * @param password
	 *            用户密码(明文)
	 * @return
	 */
	Result doLoginWithPhonePwd(String phone, String password);

	/**
	 * 是否经过社区认证
	 * 
	 * @param userId
	 * @return
	 */
	boolean isCommunityAuth(Integer userId);
}